package kioscodeal

import java.util.Date
import java.util.Set

class Carrito {

	Pedido pedido = new Pedido()

    static constraints = {
		pedido nullable:false
    }
	
	void crearPedido(User cliente){
		if (cliente == null){
			log.error("No se ha especificado un Cliente para el Pedido a crear.")
		}
		
		if (pedido == null){
			pedido = new Pedido()
		}

		pedido.cliente = cliente
		pedido.estadoPedido = EstadoPedido.PENDIENTE
		pedido.calificacionPedido = CalificacionPedido.SIN_CALIFICACION
		pedido.fechaCreacion = new Date()
		pedido.productoPedidos = new HashSet<ProductoPedido>() //TODO: ver como se cambia esto para que se haga como en groovy y no como si fuera java
		//TODO : falta el atributo "distanciaComercioCliente" que se le setee la distancia correspondiente
	}
	
	void agregarProducto(Producto producto, double cantidad){
		
		if (pedido == null){
			log.error("No existe un Pedido creado.")
		}

		//Verifico si ya existe el producto en el pedido, si existe aumento la cantidad; sino lo agrego al pedido
		boolean encontrado = false
		if (pedido.productoPedidos != null){
			for (ProductoPedido productoPedido in pedido.productoPedidos){
				if (productoPedido.producto.id == producto.id){
					productoPedido.cantidad = productoPedido.cantidad + cantidad
					pedido.productoPedidos.add(productoPedido)
					encontrado = true
					break
				}
			}
		}

		if (!encontrado){
			ProductoPedido productoPedido = new ProductoPedido()
			productoPedido.producto = producto
			productoPedido.cantidad = cantidad
			pedido.productoPedidos.add(productoPedido)
		}
	}
	
	void sacarProducto(Producto producto){
		if (pedido == null){
			log.error("No existe un Pedido creado.")
		}
		
		if (pedido.productoPedidos != null){
			for (ProductoPedido productoPedido in pedido.productoPedidos){
				if (productoPedido.producto.id == producto.id){
					pedido.productoPedidos.remove(productoPedido)
					break
				}
			}
		}
	}
	
	void modificarCantidadProducto(Producto producto, double cantidad){
		agregarProducto(producto, cantidad)	
	}
	
	Double importeTotalPedido(){
		if (pedido == null){
			log.error("No existe un Pedido creado.")
		}
		return pedido.importeTotal
	}
	
	void vaciarCarrito(){
		if (pedido == null){
			log.error("No existe un Pedido creado.")
		}
		
		if (pedido.productoPedidos != null){
			pedido.productoPedidos.clear()
		}
	}
}
